﻿using EFERP;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace HRM.DICTIONARY.DAL
{
    public class EmployeeLogicEx
    {
        ICommon<hrm_branch> exeBra;
        ICommon<hrm_department> exeDep;
        ICommon<hrm_group> exeGro;
        private hrm_branch objBra;
        private hrm_department objDep;
        private hrm_group objGro;
        public string ErrMsg { get; set; }
        public bool KQ { get; set; }

        public EmployeeLogicEx(hrm_branch objBra)
        {
            this.objBra = objBra;
            exeBra = new Common<hrm_branch>(StaticVariable.ERPEn);
        }
        public EmployeeLogicEx(hrm_branch objBra, hrm_department objDep)
        {
            this.objBra = objBra;
            this.objDep = objDep;

            exeBra = new Common<hrm_branch>(StaticVariable.ERPEn);
            exeDep = new Common<hrm_department>(StaticVariable.ERPEn);
        }
        public EmployeeLogicEx(hrm_branch objBra, hrm_department objDep, hrm_group objGro)
        {
            this.objBra = objBra;
            this.objDep = objDep;
            this.objGro = objGro;

            exeBra = new Common<hrm_branch>(StaticVariable.ERPEn);
            exeDep = new Common<hrm_department>(StaticVariable.ERPEn);
            exeGro = new Common<hrm_group>(StaticVariable.ERPEn);
        }

        /// <summary>
        /// Kiểm tra số lượng nhân viên trong chi nhánh công ty
        /// </summary>
        /// <returns></returns>
        public bool CheckQuantityInBranch()
        {
            KQ = false;
            int SLChuaChiNhanh = int.Parse(objBra.factquantity.ToString());
            int SLHienTaiChiNhanh = int.Parse(objBra.quantity.ToString());
            if (SLHienTaiChiNhanh > SLChuaChiNhanh)
            {
                ErrMsg = "Chi nhánh này đã chứa tối đa số người bạn khai báo. " + objBra.factquantity.ToString() + "người / " + objBra.quantity.ToString() + " người";
                KQ = false;
            }
            else
            {
                KQ = true;
            }
            return KQ;
        }

        /// <summary>
        /// Kiểm tra số lượng nhân viên trong phòng ban công ty
        /// </summary>
        /// <returns></returns>
        public bool CheckQuantityInDepartment()
        {
            KQ = false;
            int SLChuaChiNhanh = int.Parse(objBra.factquantity.ToString());
            int SLHienTaiChiNhanh = int.Parse(objBra.quantity.ToString());
            int SLChuaPhongBan = int.Parse(objDep.factquantity.ToString());
            int SLHienTaiPhongBan = int.Parse(objDep.quantity.ToString());
            if (SLHienTaiChiNhanh > SLChuaChiNhanh)
            {
                ErrMsg = "Phòng ban này đã chứa tối đa số người bạn khai báo. " + objBra.factquantity.ToString() + "người / " + objBra.quantity.ToString() + " người";
                KQ = false;
            }
            else
            {
                KQ = true;
            }
            if (SLHienTaiPhongBan > SLChuaPhongBan)
            {
                ErrMsg = "Phòng ban này đã chứa tối đa số người bạn khai báo. " + objDep.factquantity.ToString() + "người / " + objDep.quantity.ToString() + " người";
                KQ = false;
            }
            else
            {
                KQ = true;
            }
            return KQ;
        }

        /// <summary>
        /// Kiểm tra số lượng nhân viên trong tổ nhóm trong công ty
        /// </summary>
        /// <returns></returns>
        public bool CheckQuantityInGroup()
        {
            KQ = false;
            int SLChuaChiNhanh = int.Parse(objBra.factquantity.ToString());
            int SLHienTaiChiNhanh = int.Parse(objBra.quantity.ToString());
            int SLChuaPhongBan = int.Parse(objDep.factquantity.ToString());
            int SLHienTaiPhongBan = int.Parse(objDep.quantity.ToString());
            int SLChuaToNhom = int.Parse(objGro.factquantity.ToString());
            int SLHienTaiToNhom = int.Parse(objGro.quantity.ToString());
            if (SLHienTaiChiNhanh > SLChuaChiNhanh)
            {
                ErrMsg = "Chi nhánh này đã chứa tối đa số người bạn khai báo. " + objBra.factquantity.ToString() + "người / " + objBra.quantity.ToString() + " người";
                KQ = false;
            }
            else
            {
                KQ = true;
            }
            if (SLHienTaiPhongBan > SLChuaPhongBan)
            {
                ErrMsg = "Phòng ban này đã chứa tối đa số người bạn khai báo. " + objDep.factquantity.ToString() + "người / " + objDep.quantity.ToString() + " người";
                KQ = false;
            }
            else
            {
                KQ = true;
            }
            if (SLHienTaiToNhom > SLChuaToNhom)
            {
                ErrMsg = "Tổ nhóm này đã chứa tối đa số người bạn khai báo. " + objGro.factquantity.ToString() + "người / " + objGro.quantity.ToString() + " người";
                KQ = false;
            }
            else
            {
                KQ = true;
            }
            return KQ;
        }

        public bool CheckQuantityInBranchWhenCreateDepartment()
        {
            KQ = false;
            try
            {
                int SLChuaChiNhanh = int.Parse(objBra.factquantity.ToString());
                int SLHienTaiChiNhanh = int.Parse(objBra.quantity.ToString());
                int SLChuaPhongBanMoi = int.Parse(objDep.factquantity.ToString());
                int SLHienTaiChiNhanhSauKhiThemPhongBan = SLHienTaiChiNhanh + SLChuaPhongBanMoi;

                if (SLHienTaiChiNhanhSauKhiThemPhongBan > SLChuaChiNhanh)
                {
                    KQ = false;
                    ErrMsg = "Không hợp lệ. Tổng số lượng người của các phòng ban lớn hơn số lượng người khai báo trong chi nhánh.";
                }
                else
                {
                    KQ = true;
                }
            }
            catch (Exception)
            {
                ErrMsg = "Thao tác thực hiện xử lý bị lỗi";
                KQ = false;
            }
            return KQ;
        }
        public bool CheckQuantityInBranchWhenUpdateDepartment()
        {
            KQ = false;
            try
            {
                int SLChuaChiNhanh = int.Parse(objBra.factquantity.ToString());
                int SLHienTaiChiNhanh = int.Parse(objBra.quantity.ToString());
                int SLChuaPhongBanCapNhat = int.Parse(objDep.factquantity.ToString());
                int SLChuaPhongBanCapNhatThem = 0;
                int SLChuaChiNhanhSauKhiThemPhongBan = 0;

                var Department = exeDep.DbSet.Where(k => k.departmentcode == objDep.departmentcode).SingleOrDefault();
                int SLChuaPhongBan = int.Parse(Department.factquantity.ToString());
                SLChuaPhongBanCapNhatThem = SLChuaPhongBanCapNhat - SLChuaPhongBan;
                SLChuaChiNhanhSauKhiThemPhongBan = SLChuaPhongBanCapNhatThem + SLHienTaiChiNhanh;

                if (SLChuaChiNhanhSauKhiThemPhongBan > SLChuaChiNhanh)
                {
                    KQ = false;
                    ErrMsg = "Không hợp lệ. Tổng số lượng người của các phòng ban lớn hơn số lượng người khai báo trong chi nhánh.";
                }
                else
                {
                    KQ = true;
                }
            }
            catch(Exception)
            {
                ErrMsg = "Thao tác thực hiện xử lý bị lỗi";
                KQ = false;
            }
            return KQ;
        }

        public bool CheckQuantityInDepartmentWhenCreateGroup()
        {
            KQ = false;
            try
            {
                int SLChuaPhongBan = int.Parse(objDep.factquantity.ToString());
                int SLHienTaiPhongBan = int.Parse(objDep.quantity.ToString());
                
                int SLChuaToNhomMoi = int.Parse(objGro.factquantity.ToString());
                int SLHienTaiChiNhanhSauKhiThemToNhom = SLHienTaiPhongBan + SLChuaToNhomMoi;

                if (SLHienTaiChiNhanhSauKhiThemToNhom > SLChuaPhongBan)
                {
                    KQ = false;
                    ErrMsg = "Không hợp lệ. Tổng số lượng người của các tổ nhóm lớn hơn số lượng người khai báo trong phòng ban.";
                }
                else
                {
                    KQ = true;
                }
            }
            catch (Exception)
            {
                ErrMsg = "Thao tác thực hiện xử lý bị lỗi";
                KQ = false;
            }
            return KQ;
        }
        public bool CheckQuantityInDepartmentWhenUpdateGroup()
        {
            KQ = false;
            try
            {
                int SLChuaPhongBan = int.Parse(objDep.factquantity.ToString());
                int SLHienTaiPhongBan = int.Parse(objDep.quantity.ToString());
                int SLChuaToNhomCapNhat = int.Parse(objGro.factquantity.ToString());
                int SLChuaToNhomCapNhatThem = 0;
                int SLChuaPhongBanSauKhiThemToNhom = 0;

                var Group = exeGro.DbSet.Where(k => k.groupcode == objGro.groupcode).SingleOrDefault();
                int SLChuaToNhom = int.Parse(Group.factquantity.ToString());
                SLChuaToNhomCapNhatThem = SLChuaToNhomCapNhat - SLChuaToNhom;
                SLChuaPhongBanSauKhiThemToNhom = SLChuaToNhomCapNhatThem + SLHienTaiPhongBan;

                if (SLChuaPhongBanSauKhiThemToNhom > SLChuaPhongBan)
                {
                    KQ = false;
                    ErrMsg = "Không hợp lệ. Tổng số lượng người của các tổ nhóm lớn hơn số lượng người khai báo trong phòng ban.";
                }
                else
                {
                    KQ = true;
                }
            }
            catch (Exception)
            {
                ErrMsg = "Thao tác thực hiện xử lý bị lỗi";
                KQ = false;
            }
            return KQ;
        }
     }
}
